//
//  LJData.m
//
//  Created by   on 2018/9/28
//  Copyright (c) 2018 __MyCompanyName__. All rights reserved.
//

#import "LJData.h"
#import "LJProjectTags.h"
#import "LJSpecial.h"
#import "LJRecommendLogInfoDto.h"


NSString *const kLJDataMinFrameArea = @"min_frame_area";
NSString *const kLJDataBuildName = @"build_name";
NSString *const kLJDataRooms = @"rooms";
NSString *const kLJDataResblockAlias = @"resblock_alias";
NSString *const kLJDataLongitude = @"longitude";
NSString *const kLJDataTotalPriceMin = @"total_price_min";
NSString *const kLJDataEvaluate = @"evaluate";
NSString *const kLJDataBizcircleName = @"bizcircle_name";
NSString *const kLJDataSpecialTags = @"special_tags";
NSString *const kLJDataDecorateType = @"decorate_type";
NSString *const kLJDataAvgPriceMax = @"avg_price_max";
NSString *const kLJDataId = @"id";
NSString *const kLJDataAddress = @"address";
NSString *const kLJDataPrice = @"price";
NSString *const kLJDataTotalPrice = @"total_price";
NSString *const kLJDataTotalPriceMax = @"total_price_max";
NSString *const kLJDataCityName = @"city_name";
NSString *const kLJDataHouseAmount = @"house_amount";
NSString *const kLJDataDecoration = @"decoration";
NSString *const kLJDataHasVirtualView = @"has_virtual_view";
NSString *const kLJDataDiscountType = @"discount_type";
NSString *const kLJDataProjectTags = @"project_tags";
NSString *const kLJDataSaleStatus = @"sale_status";
NSString *const kLJDataAddressRemark = @"address_remark";
NSString *const kLJDataVideoIntro = @"video_intro";
NSString *const kLJDataDiscountValue = @"discount_value";
NSString *const kLJDataCarRatio = @"carRatio";
NSString *const kLJDataTags = @"tags";
NSString *const kLJDataBuildId = @"build_id";
NSString *const kLJDataHouseType = @"house_type";
NSString *const kLJDataMaxFrameArea = @"max_frame_area";
NSString *const kLJDataLatitude = @"latitude";
NSString *const kLJDataBuildType = @"build_type";
NSString *const kLJDataOpenTime = @"open_time";
NSString *const kLJDataPriceConfirmTime = @"price_confirm_time";
NSString *const kLJDataFullSpell = @"full_spell";
NSString *const kLJDataDistrictId = @"district_id";
NSString *const kLJDataOvergroundCarNum = @"overground_car_num";
NSString *const kLJDataIsCooperation = @"is_cooperation";
NSString *const kLJDataStoreAddr = @"store_addr";
NSString *const kLJDataDiscountRealpay = @"discount_realpay";
NSString *const kLJDataProjectName = @"project_name";
NSString *const kLJDataOutletCenterTel = @"outlet_center_tel";
NSString *const kLJDataAdministrativeAddress = @"administrative_address";
NSString *const kLJDataHouseTypeValue = @"house_type_value";
NSString *const kLJDataVirescenceRate = @"virescence_rate";
NSString *const kLJDataProcessStatus = @"process_status";
NSString *const kLJDataSpecial = @"special";
NSString *const kLJDataEvaluateStatus = @"evaluate_status";
NSString *const kLJDataAveragePrice = @"average_price";
NSString *const kLJDataBuildingCount = @"building_count";
NSString *const kLJDataLowestTotalPrice = @"lowest_total_price";
NSString *const kLJDataShowPrice = @"show_price";
NSString *const kLJDataBizcircleId = @"bizcircle_id";
NSString *const kLJDataMinFrameInsideArea = @"min_frame_inside_area";
NSString *const kLJDataResblockName = @"resblock_name";
NSString *const kLJDataDistrictName = @"district_name";
NSString *const kLJDataCityId = @"city_id";
NSString *const kLJDataVirescenceArea = @"virescence_area";
NSString *const kLJDataIsExclusive = @"is_exclusive";
NSString *const kLJDataPropertyAddress = @"property_address";
NSString *const kLJDataShowPriceConfirmTime = @"show_price_confirm_time";
NSString *const kLJDataAllowance = @"allowance";
NSString *const kLJDataResblockFrameArea = @"resblock_frame_area";
NSString *const kLJDataResblockDesc = @"resblock_desc";
NSString *const kLJDataShowPriceDesc = @"show_price_desc";
NSString *const kLJDataRecommendLogInfoDto = @"recommendLogInfoDto";
NSString *const kLJDataCheckinStartDate = @"checkin_start_date";
NSString *const kLJDataDisplayVideoIntro = @"display_video_intro";
NSString *const kLJDataPid = @"pid";
NSString *const kLJDataStatus = @"status";
NSString *const kLJDataMaxFrameInsideArea = @"max_frame_inside_area";
NSString *const kLJDataViewUrl = @"view_url";
NSString *const kLJDataDiscountInfo = @"discount_info";
NSString *const kLJDataAddressDesc = @"address_desc";
NSString *const kLJDataStoreTel = @"store_tel";
NSString *const kLJDataAllowanceComm = @"allowance_comm";
NSString *const kLJDataSiteArea = @"site_area";
NSString *const kLJDataPriceShowConfig = @"price_show_config";
NSString *const kLJDataSpecialTag = @"special_tag";
NSString *const kLJDataTotalArea = @"total_area";
NSString *const kLJDataUndergroundCarNum = @"underground_car_num";
NSString *const kLJDataPermitAllReady = @"permit_all_ready";
NSString *const kLJDataShowPriceUnit = @"show_price_unit";
NSString *const kLJDataCoverPic = @"cover_pic";
NSString *const kLJDataPartNum = @"part_num";
NSString *const kLJDataFrameRooms = @"frame_rooms";
NSString *const kLJDataCubageRate = @"cubage_rate";


@interface LJData ()

- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;

@end

@implementation LJData

@synthesize minFrameArea = _minFrameArea;
@synthesize buildName = _buildName;
@synthesize rooms = _rooms;
@synthesize resblockAlias = _resblockAlias;
@synthesize longitude = _longitude;
@synthesize totalPriceMin = _totalPriceMin;
@synthesize evaluate = _evaluate;
@synthesize bizcircleName = _bizcircleName;
@synthesize specialTags = _specialTags;
@synthesize decorateType = _decorateType;
@synthesize avgPriceMax = _avgPriceMax;
@synthesize dataIdentifier = _dataIdentifier;
@synthesize address = _address;
@synthesize price = _price;
@synthesize totalPrice = _totalPrice;
@synthesize totalPriceMax = _totalPriceMax;
@synthesize cityName = _cityName;
@synthesize houseAmount = _houseAmount;
@synthesize decoration = _decoration;
@synthesize hasVirtualView = _hasVirtualView;
@synthesize discountType = _discountType;
@synthesize projectTags = _projectTags;
@synthesize saleStatus = _saleStatus;
@synthesize addressRemark = _addressRemark;
@synthesize videoIntro = _videoIntro;
@synthesize discountValue = _discountValue;
@synthesize carRatio = _carRatio;
@synthesize tags = _tags;
@synthesize buildId = _buildId;
@synthesize houseType = _houseType;
@synthesize maxFrameArea = _maxFrameArea;
@synthesize latitude = _latitude;
@synthesize buildType = _buildType;
@synthesize openTime = _openTime;
@synthesize priceConfirmTime = _priceConfirmTime;
@synthesize fullSpell = _fullSpell;
@synthesize districtId = _districtId;
@synthesize overgroundCarNum = _overgroundCarNum;
@synthesize isCooperation = _isCooperation;
@synthesize storeAddr = _storeAddr;
@synthesize discountRealpay = _discountRealpay;
@synthesize projectName = _projectName;
@synthesize outletCenterTel = _outletCenterTel;
@synthesize administrativeAddress = _administrativeAddress;
@synthesize houseTypeValue = _houseTypeValue;
@synthesize virescenceRate = _virescenceRate;
@synthesize processStatus = _processStatus;
@synthesize special = _special;
@synthesize evaluateStatus = _evaluateStatus;
@synthesize averagePrice = _averagePrice;
@synthesize buildingCount = _buildingCount;
@synthesize lowestTotalPrice = _lowestTotalPrice;
@synthesize showPrice = _showPrice;
@synthesize bizcircleId = _bizcircleId;
@synthesize minFrameInsideArea = _minFrameInsideArea;
@synthesize resblockName = _resblockName;
@synthesize districtName = _districtName;
@synthesize cityId = _cityId;
@synthesize virescenceArea = _virescenceArea;
@synthesize isExclusive = _isExclusive;
@synthesize propertyAddress = _propertyAddress;
@synthesize showPriceConfirmTime = _showPriceConfirmTime;
@synthesize allowance = _allowance;
@synthesize resblockFrameArea = _resblockFrameArea;
@synthesize resblockDesc = _resblockDesc;
@synthesize showPriceDesc = _showPriceDesc;
@synthesize recommendLogInfoDto = _recommendLogInfoDto;
@synthesize checkinStartDate = _checkinStartDate;
@synthesize displayVideoIntro = _displayVideoIntro;
@synthesize pid = _pid;
@synthesize status = _status;
@synthesize maxFrameInsideArea = _maxFrameInsideArea;
@synthesize viewUrl = _viewUrl;
@synthesize discountInfo = _discountInfo;
@synthesize addressDesc = _addressDesc;
@synthesize storeTel = _storeTel;
@synthesize allowanceComm = _allowanceComm;
@synthesize siteArea = _siteArea;
@synthesize priceShowConfig = _priceShowConfig;
@synthesize specialTag = _specialTag;
@synthesize totalArea = _totalArea;
@synthesize undergroundCarNum = _undergroundCarNum;
@synthesize permitAllReady = _permitAllReady;
@synthesize showPriceUnit = _showPriceUnit;
@synthesize coverPic = _coverPic;
@synthesize partNum = _partNum;
@synthesize frameRooms = _frameRooms;
@synthesize cubageRate = _cubageRate;


+ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict {
    return [[self alloc] initWithDictionary:dict];
}

- (instancetype)initWithDictionary:(NSDictionary *)dict {
    self = [super init];
    
    // This check serves to make sure that a non-NSDictionary object
    // passed into the model class doesn't break the parsing.
    if (self && [dict isKindOfClass:[NSDictionary class]]) {
            self.minFrameArea = [self objectOrNilForKey:kLJDataMinFrameArea fromDictionary:dict];
            self.buildName = [self objectOrNilForKey:kLJDataBuildName fromDictionary:dict];
            self.rooms = [self objectOrNilForKey:kLJDataRooms fromDictionary:dict];
            self.resblockAlias = [self objectOrNilForKey:kLJDataResblockAlias fromDictionary:dict];
            self.longitude = [self objectOrNilForKey:kLJDataLongitude fromDictionary:dict];
            self.totalPriceMin = [self objectOrNilForKey:kLJDataTotalPriceMin fromDictionary:dict];
            self.evaluate = [self objectOrNilForKey:kLJDataEvaluate fromDictionary:dict];
            self.bizcircleName = [self objectOrNilForKey:kLJDataBizcircleName fromDictionary:dict];
            self.specialTags = [self objectOrNilForKey:kLJDataSpecialTags fromDictionary:dict];
            self.decorateType = [self objectOrNilForKey:kLJDataDecorateType fromDictionary:dict];
            self.avgPriceMax = [self objectOrNilForKey:kLJDataAvgPriceMax fromDictionary:dict];
            self.dataIdentifier = [self objectOrNilForKey:kLJDataId fromDictionary:dict];
            self.address = [self objectOrNilForKey:kLJDataAddress fromDictionary:dict];
            self.price = [self objectOrNilForKey:kLJDataPrice fromDictionary:dict];
            self.totalPrice = [self objectOrNilForKey:kLJDataTotalPrice fromDictionary:dict];
            self.totalPriceMax = [self objectOrNilForKey:kLJDataTotalPriceMax fromDictionary:dict];
            self.cityName = [self objectOrNilForKey:kLJDataCityName fromDictionary:dict];
            self.houseAmount = [self objectOrNilForKey:kLJDataHouseAmount fromDictionary:dict];
            self.decoration = [self objectOrNilForKey:kLJDataDecoration fromDictionary:dict];
            self.hasVirtualView = [self objectOrNilForKey:kLJDataHasVirtualView fromDictionary:dict];
            self.discountType = [self objectOrNilForKey:kLJDataDiscountType fromDictionary:dict];
    NSObject *receivedLJProjectTags = [dict objectForKey:kLJDataProjectTags];
    NSMutableArray *parsedLJProjectTags = [NSMutableArray array];
    
    if ([receivedLJProjectTags isKindOfClass:[NSArray class]]) {
        for (NSDictionary *item in (NSArray *)receivedLJProjectTags) {
            if ([item isKindOfClass:[NSDictionary class]]) {
                [parsedLJProjectTags addObject:[LJProjectTags modelObjectWithDictionary:item]];
            }
       }
    } else if ([receivedLJProjectTags isKindOfClass:[NSDictionary class]]) {
       [parsedLJProjectTags addObject:[LJProjectTags modelObjectWithDictionary:(NSDictionary *)receivedLJProjectTags]];
    }

    self.projectTags = [NSArray arrayWithArray:parsedLJProjectTags];
            self.saleStatus = [self objectOrNilForKey:kLJDataSaleStatus fromDictionary:dict];
            self.addressRemark = [self objectOrNilForKey:kLJDataAddressRemark fromDictionary:dict];
            self.videoIntro = [self objectOrNilForKey:kLJDataVideoIntro fromDictionary:dict];
            self.discountValue = [self objectOrNilForKey:kLJDataDiscountValue fromDictionary:dict];
            self.carRatio = [self objectOrNilForKey:kLJDataCarRatio fromDictionary:dict];
            self.tags = [self objectOrNilForKey:kLJDataTags fromDictionary:dict];
            self.buildId = [self objectOrNilForKey:kLJDataBuildId fromDictionary:dict];
            self.houseType = [self objectOrNilForKey:kLJDataHouseType fromDictionary:dict];
            self.maxFrameArea = [self objectOrNilForKey:kLJDataMaxFrameArea fromDictionary:dict];
            self.latitude = [self objectOrNilForKey:kLJDataLatitude fromDictionary:dict];
            self.buildType = [self objectOrNilForKey:kLJDataBuildType fromDictionary:dict];
            self.openTime = [self objectOrNilForKey:kLJDataOpenTime fromDictionary:dict];
            self.priceConfirmTime = [self objectOrNilForKey:kLJDataPriceConfirmTime fromDictionary:dict];
            self.fullSpell = [self objectOrNilForKey:kLJDataFullSpell fromDictionary:dict];
            self.districtId = [self objectOrNilForKey:kLJDataDistrictId fromDictionary:dict];
            self.overgroundCarNum = [self objectOrNilForKey:kLJDataOvergroundCarNum fromDictionary:dict];
            self.isCooperation = [self objectOrNilForKey:kLJDataIsCooperation fromDictionary:dict];
            self.storeAddr = [self objectOrNilForKey:kLJDataStoreAddr fromDictionary:dict];
            self.discountRealpay = [self objectOrNilForKey:kLJDataDiscountRealpay fromDictionary:dict];
            self.projectName = [self objectOrNilForKey:kLJDataProjectName fromDictionary:dict];
            self.outletCenterTel = [self objectOrNilForKey:kLJDataOutletCenterTel fromDictionary:dict];
            self.administrativeAddress = [self objectOrNilForKey:kLJDataAdministrativeAddress fromDictionary:dict];
            self.houseTypeValue = [self objectOrNilForKey:kLJDataHouseTypeValue fromDictionary:dict];
            self.virescenceRate = [self objectOrNilForKey:kLJDataVirescenceRate fromDictionary:dict];
            self.processStatus = [self objectOrNilForKey:kLJDataProcessStatus fromDictionary:dict];
            self.special = [LJSpecial modelObjectWithDictionary:[dict objectForKey:kLJDataSpecial]];
            self.evaluateStatus = [self objectOrNilForKey:kLJDataEvaluateStatus fromDictionary:dict];
            self.averagePrice = [self objectOrNilForKey:kLJDataAveragePrice fromDictionary:dict];
            self.buildingCount = [self objectOrNilForKey:kLJDataBuildingCount fromDictionary:dict];
            self.lowestTotalPrice = [self objectOrNilForKey:kLJDataLowestTotalPrice fromDictionary:dict];
            self.showPrice = [self objectOrNilForKey:kLJDataShowPrice fromDictionary:dict];
            self.bizcircleId = [self objectOrNilForKey:kLJDataBizcircleId fromDictionary:dict];
            self.minFrameInsideArea = [self objectOrNilForKey:kLJDataMinFrameInsideArea fromDictionary:dict];
            self.resblockName = [self objectOrNilForKey:kLJDataResblockName fromDictionary:dict];
            self.districtName = [self objectOrNilForKey:kLJDataDistrictName fromDictionary:dict];
            self.cityId = [self objectOrNilForKey:kLJDataCityId fromDictionary:dict];
            self.virescenceArea = [self objectOrNilForKey:kLJDataVirescenceArea fromDictionary:dict];
            self.isExclusive = [self objectOrNilForKey:kLJDataIsExclusive fromDictionary:dict];
            self.propertyAddress = [self objectOrNilForKey:kLJDataPropertyAddress fromDictionary:dict];
            self.showPriceConfirmTime = [self objectOrNilForKey:kLJDataShowPriceConfirmTime fromDictionary:dict];
            self.allowance = [self objectOrNilForKey:kLJDataAllowance fromDictionary:dict];
            self.resblockFrameArea = [self objectOrNilForKey:kLJDataResblockFrameArea fromDictionary:dict];
            self.resblockDesc = [self objectOrNilForKey:kLJDataResblockDesc fromDictionary:dict];
            self.showPriceDesc = [self objectOrNilForKey:kLJDataShowPriceDesc fromDictionary:dict];
            self.recommendLogInfoDto = [LJRecommendLogInfoDto modelObjectWithDictionary:[dict objectForKey:kLJDataRecommendLogInfoDto]];
            self.checkinStartDate = [self objectOrNilForKey:kLJDataCheckinStartDate fromDictionary:dict];
            self.displayVideoIntro = [self objectOrNilForKey:kLJDataDisplayVideoIntro fromDictionary:dict];
            self.pid = [self objectOrNilForKey:kLJDataPid fromDictionary:dict];
            self.status = [self objectOrNilForKey:kLJDataStatus fromDictionary:dict];
            self.maxFrameInsideArea = [self objectOrNilForKey:kLJDataMaxFrameInsideArea fromDictionary:dict];
            self.viewUrl = [self objectOrNilForKey:kLJDataViewUrl fromDictionary:dict];
            self.discountInfo = [self objectOrNilForKey:kLJDataDiscountInfo fromDictionary:dict];
            self.addressDesc = [self objectOrNilForKey:kLJDataAddressDesc fromDictionary:dict];
            self.storeTel = [self objectOrNilForKey:kLJDataStoreTel fromDictionary:dict];
            self.allowanceComm = [self objectOrNilForKey:kLJDataAllowanceComm fromDictionary:dict];
            self.siteArea = [self objectOrNilForKey:kLJDataSiteArea fromDictionary:dict];
            self.priceShowConfig = [self objectOrNilForKey:kLJDataPriceShowConfig fromDictionary:dict];
            self.specialTag = [self objectOrNilForKey:kLJDataSpecialTag fromDictionary:dict];
            self.totalArea = [self objectOrNilForKey:kLJDataTotalArea fromDictionary:dict];
            self.undergroundCarNum = [self objectOrNilForKey:kLJDataUndergroundCarNum fromDictionary:dict];
            self.permitAllReady = [self objectOrNilForKey:kLJDataPermitAllReady fromDictionary:dict];
            self.showPriceUnit = [self objectOrNilForKey:kLJDataShowPriceUnit fromDictionary:dict];
            self.coverPic = [self objectOrNilForKey:kLJDataCoverPic fromDictionary:dict];
            self.partNum = [self objectOrNilForKey:kLJDataPartNum fromDictionary:dict];
            self.frameRooms = [self objectOrNilForKey:kLJDataFrameRooms fromDictionary:dict];
            self.cubageRate = [self objectOrNilForKey:kLJDataCubageRate fromDictionary:dict];

    }
    
    return self;
    
}

- (NSDictionary *)dictionaryRepresentation {
    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
    [mutableDict setValue:self.minFrameArea forKey:kLJDataMinFrameArea];
    [mutableDict setValue:self.buildName forKey:kLJDataBuildName];
    [mutableDict setValue:self.rooms forKey:kLJDataRooms];
    [mutableDict setValue:self.resblockAlias forKey:kLJDataResblockAlias];
    [mutableDict setValue:self.longitude forKey:kLJDataLongitude];
    [mutableDict setValue:self.totalPriceMin forKey:kLJDataTotalPriceMin];
    NSMutableArray *tempArrayForEvaluate = [NSMutableArray array];
    
    for (NSObject *subArrayObject in self.evaluate) {
        if ([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) {
            // This class is a model object
            [tempArrayForEvaluate addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]];
        } else {
            // Generic object
            [tempArrayForEvaluate addObject:subArrayObject];
        }
    }
    [mutableDict setValue:[NSArray arrayWithArray:tempArrayForEvaluate] forKey:kLJDataEvaluate];
    [mutableDict setValue:self.bizcircleName forKey:kLJDataBizcircleName];
    NSMutableArray *tempArrayForSpecialTags = [NSMutableArray array];
    
    for (NSObject *subArrayObject in self.specialTags) {
        if ([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) {
            // This class is a model object
            [tempArrayForSpecialTags addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]];
        } else {
            // Generic object
            [tempArrayForSpecialTags addObject:subArrayObject];
        }
    }
    [mutableDict setValue:[NSArray arrayWithArray:tempArrayForSpecialTags] forKey:kLJDataSpecialTags];
    [mutableDict setValue:self.decorateType forKey:kLJDataDecorateType];
    [mutableDict setValue:self.avgPriceMax forKey:kLJDataAvgPriceMax];
    [mutableDict setValue:self.dataIdentifier forKey:kLJDataId];
    [mutableDict setValue:self.address forKey:kLJDataAddress];
    [mutableDict setValue:self.price forKey:kLJDataPrice];
    [mutableDict setValue:self.totalPrice forKey:kLJDataTotalPrice];
    [mutableDict setValue:self.totalPriceMax forKey:kLJDataTotalPriceMax];
    [mutableDict setValue:self.cityName forKey:kLJDataCityName];
    [mutableDict setValue:self.houseAmount forKey:kLJDataHouseAmount];
    [mutableDict setValue:self.decoration forKey:kLJDataDecoration];
    [mutableDict setValue:self.hasVirtualView forKey:kLJDataHasVirtualView];
    [mutableDict setValue:self.discountType forKey:kLJDataDiscountType];
    NSMutableArray *tempArrayForProjectTags = [NSMutableArray array];
    
    for (NSObject *subArrayObject in self.projectTags) {
        if ([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) {
            // This class is a model object
            [tempArrayForProjectTags addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]];
        } else {
            // Generic object
            [tempArrayForProjectTags addObject:subArrayObject];
        }
    }
    [mutableDict setValue:[NSArray arrayWithArray:tempArrayForProjectTags] forKey:kLJDataProjectTags];
    [mutableDict setValue:self.saleStatus forKey:kLJDataSaleStatus];
    [mutableDict setValue:self.addressRemark forKey:kLJDataAddressRemark];
    NSMutableArray *tempArrayForVideoIntro = [NSMutableArray array];
    
    for (NSObject *subArrayObject in self.videoIntro) {
        if ([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) {
            // This class is a model object
            [tempArrayForVideoIntro addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]];
        } else {
            // Generic object
            [tempArrayForVideoIntro addObject:subArrayObject];
        }
    }
    [mutableDict setValue:[NSArray arrayWithArray:tempArrayForVideoIntro] forKey:kLJDataVideoIntro];
    [mutableDict setValue:self.discountValue forKey:kLJDataDiscountValue];
    [mutableDict setValue:self.carRatio forKey:kLJDataCarRatio];
    NSMutableArray *tempArrayForTags = [NSMutableArray array];
    
    for (NSObject *subArrayObject in self.tags) {
        if ([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) {
            // This class is a model object
            [tempArrayForTags addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]];
        } else {
            // Generic object
            [tempArrayForTags addObject:subArrayObject];
        }
    }
    [mutableDict setValue:[NSArray arrayWithArray:tempArrayForTags] forKey:kLJDataTags];
    [mutableDict setValue:self.buildId forKey:kLJDataBuildId];
    [mutableDict setValue:self.houseType forKey:kLJDataHouseType];
    [mutableDict setValue:self.maxFrameArea forKey:kLJDataMaxFrameArea];
    [mutableDict setValue:self.latitude forKey:kLJDataLatitude];
    [mutableDict setValue:self.buildType forKey:kLJDataBuildType];
    [mutableDict setValue:self.openTime forKey:kLJDataOpenTime];
    [mutableDict setValue:self.priceConfirmTime forKey:kLJDataPriceConfirmTime];
    [mutableDict setValue:self.fullSpell forKey:kLJDataFullSpell];
    [mutableDict setValue:self.districtId forKey:kLJDataDistrictId];
    [mutableDict setValue:self.overgroundCarNum forKey:kLJDataOvergroundCarNum];
    [mutableDict setValue:self.isCooperation forKey:kLJDataIsCooperation];
    [mutableDict setValue:self.storeAddr forKey:kLJDataStoreAddr];
    [mutableDict setValue:self.discountRealpay forKey:kLJDataDiscountRealpay];
    [mutableDict setValue:self.projectName forKey:kLJDataProjectName];
    [mutableDict setValue:self.outletCenterTel forKey:kLJDataOutletCenterTel];
    [mutableDict setValue:self.administrativeAddress forKey:kLJDataAdministrativeAddress];
    [mutableDict setValue:self.houseTypeValue forKey:kLJDataHouseTypeValue];
    [mutableDict setValue:self.virescenceRate forKey:kLJDataVirescenceRate];
    [mutableDict setValue:self.processStatus forKey:kLJDataProcessStatus];
    [mutableDict setValue:[self.special dictionaryRepresentation] forKey:kLJDataSpecial];
    [mutableDict setValue:self.evaluateStatus forKey:kLJDataEvaluateStatus];
    [mutableDict setValue:self.averagePrice forKey:kLJDataAveragePrice];
    [mutableDict setValue:self.buildingCount forKey:kLJDataBuildingCount];
    [mutableDict setValue:self.lowestTotalPrice forKey:kLJDataLowestTotalPrice];
    [mutableDict setValue:self.showPrice forKey:kLJDataShowPrice];
    [mutableDict setValue:self.bizcircleId forKey:kLJDataBizcircleId];
    [mutableDict setValue:self.minFrameInsideArea forKey:kLJDataMinFrameInsideArea];
    [mutableDict setValue:self.resblockName forKey:kLJDataResblockName];
    [mutableDict setValue:self.districtName forKey:kLJDataDistrictName];
    [mutableDict setValue:self.cityId forKey:kLJDataCityId];
    [mutableDict setValue:self.virescenceArea forKey:kLJDataVirescenceArea];
    [mutableDict setValue:self.isExclusive forKey:kLJDataIsExclusive];
    [mutableDict setValue:self.propertyAddress forKey:kLJDataPropertyAddress];
    [mutableDict setValue:self.showPriceConfirmTime forKey:kLJDataShowPriceConfirmTime];
    [mutableDict setValue:self.allowance forKey:kLJDataAllowance];
    [mutableDict setValue:self.resblockFrameArea forKey:kLJDataResblockFrameArea];
    [mutableDict setValue:self.resblockDesc forKey:kLJDataResblockDesc];
    [mutableDict setValue:self.showPriceDesc forKey:kLJDataShowPriceDesc];
    [mutableDict setValue:[self.recommendLogInfoDto dictionaryRepresentation] forKey:kLJDataRecommendLogInfoDto];
    [mutableDict setValue:self.checkinStartDate forKey:kLJDataCheckinStartDate];
    [mutableDict setValue:self.displayVideoIntro forKey:kLJDataDisplayVideoIntro];
    [mutableDict setValue:self.pid forKey:kLJDataPid];
    [mutableDict setValue:self.status forKey:kLJDataStatus];
    [mutableDict setValue:self.maxFrameInsideArea forKey:kLJDataMaxFrameInsideArea];
    [mutableDict setValue:self.viewUrl forKey:kLJDataViewUrl];
    [mutableDict setValue:self.discountInfo forKey:kLJDataDiscountInfo];
    [mutableDict setValue:self.addressDesc forKey:kLJDataAddressDesc];
    [mutableDict setValue:self.storeTel forKey:kLJDataStoreTel];
    [mutableDict setValue:self.allowanceComm forKey:kLJDataAllowanceComm];
    [mutableDict setValue:self.siteArea forKey:kLJDataSiteArea];
    [mutableDict setValue:self.priceShowConfig forKey:kLJDataPriceShowConfig];
    [mutableDict setValue:self.specialTag forKey:kLJDataSpecialTag];
    [mutableDict setValue:self.totalArea forKey:kLJDataTotalArea];
    [mutableDict setValue:self.undergroundCarNum forKey:kLJDataUndergroundCarNum];
    [mutableDict setValue:self.permitAllReady forKey:kLJDataPermitAllReady];
    [mutableDict setValue:self.showPriceUnit forKey:kLJDataShowPriceUnit];
    [mutableDict setValue:self.coverPic forKey:kLJDataCoverPic];
    [mutableDict setValue:self.partNum forKey:kLJDataPartNum];
    NSMutableArray *tempArrayForFrameRooms = [NSMutableArray array];
    
    for (NSObject *subArrayObject in self.frameRooms) {
        if ([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) {
            // This class is a model object
            [tempArrayForFrameRooms addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]];
        } else {
            // Generic object
            [tempArrayForFrameRooms addObject:subArrayObject];
        }
    }
    [mutableDict setValue:[NSArray arrayWithArray:tempArrayForFrameRooms] forKey:kLJDataFrameRooms];
    [mutableDict setValue:self.cubageRate forKey:kLJDataCubageRate];

    return [NSDictionary dictionaryWithDictionary:mutableDict];
}

- (NSString *)description  {
    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
}

#pragma mark - Helper Method
- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict {
    id object = [dict objectForKey:aKey];
    return [object isEqual:[NSNull null]] ? nil : object;
}


#pragma mark - NSCoding Methods

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super init];

    self.minFrameArea = [aDecoder decodeObjectForKey:kLJDataMinFrameArea];
    self.buildName = [aDecoder decodeObjectForKey:kLJDataBuildName];
    self.rooms = [aDecoder decodeObjectForKey:kLJDataRooms];
    self.resblockAlias = [aDecoder decodeObjectForKey:kLJDataResblockAlias];
    self.longitude = [aDecoder decodeObjectForKey:kLJDataLongitude];
    self.totalPriceMin = [aDecoder decodeObjectForKey:kLJDataTotalPriceMin];
    self.evaluate = [aDecoder decodeObjectForKey:kLJDataEvaluate];
    self.bizcircleName = [aDecoder decodeObjectForKey:kLJDataBizcircleName];
    self.specialTags = [aDecoder decodeObjectForKey:kLJDataSpecialTags];
    self.decorateType = [aDecoder decodeObjectForKey:kLJDataDecorateType];
    self.avgPriceMax = [aDecoder decodeObjectForKey:kLJDataAvgPriceMax];
    self.dataIdentifier = [aDecoder decodeObjectForKey:kLJDataId];
    self.address = [aDecoder decodeObjectForKey:kLJDataAddress];
    self.price = [aDecoder decodeObjectForKey:kLJDataPrice];
    self.totalPrice = [aDecoder decodeObjectForKey:kLJDataTotalPrice];
    self.totalPriceMax = [aDecoder decodeObjectForKey:kLJDataTotalPriceMax];
    self.cityName = [aDecoder decodeObjectForKey:kLJDataCityName];
    self.houseAmount = [aDecoder decodeObjectForKey:kLJDataHouseAmount];
    self.decoration = [aDecoder decodeObjectForKey:kLJDataDecoration];
    self.hasVirtualView = [aDecoder decodeObjectForKey:kLJDataHasVirtualView];
    self.discountType = [aDecoder decodeObjectForKey:kLJDataDiscountType];
    self.projectTags = [aDecoder decodeObjectForKey:kLJDataProjectTags];
    self.saleStatus = [aDecoder decodeObjectForKey:kLJDataSaleStatus];
    self.addressRemark = [aDecoder decodeObjectForKey:kLJDataAddressRemark];
    self.videoIntro = [aDecoder decodeObjectForKey:kLJDataVideoIntro];
    self.discountValue = [aDecoder decodeObjectForKey:kLJDataDiscountValue];
    self.carRatio = [aDecoder decodeObjectForKey:kLJDataCarRatio];
    self.tags = [aDecoder decodeObjectForKey:kLJDataTags];
    self.buildId = [aDecoder decodeObjectForKey:kLJDataBuildId];
    self.houseType = [aDecoder decodeObjectForKey:kLJDataHouseType];
    self.maxFrameArea = [aDecoder decodeObjectForKey:kLJDataMaxFrameArea];
    self.latitude = [aDecoder decodeObjectForKey:kLJDataLatitude];
    self.buildType = [aDecoder decodeObjectForKey:kLJDataBuildType];
    self.openTime = [aDecoder decodeObjectForKey:kLJDataOpenTime];
    self.priceConfirmTime = [aDecoder decodeObjectForKey:kLJDataPriceConfirmTime];
    self.fullSpell = [aDecoder decodeObjectForKey:kLJDataFullSpell];
    self.districtId = [aDecoder decodeObjectForKey:kLJDataDistrictId];
    self.overgroundCarNum = [aDecoder decodeObjectForKey:kLJDataOvergroundCarNum];
    self.isCooperation = [aDecoder decodeObjectForKey:kLJDataIsCooperation];
    self.storeAddr = [aDecoder decodeObjectForKey:kLJDataStoreAddr];
    self.discountRealpay = [aDecoder decodeObjectForKey:kLJDataDiscountRealpay];
    self.projectName = [aDecoder decodeObjectForKey:kLJDataProjectName];
    self.outletCenterTel = [aDecoder decodeObjectForKey:kLJDataOutletCenterTel];
    self.administrativeAddress = [aDecoder decodeObjectForKey:kLJDataAdministrativeAddress];
    self.houseTypeValue = [aDecoder decodeObjectForKey:kLJDataHouseTypeValue];
    self.virescenceRate = [aDecoder decodeObjectForKey:kLJDataVirescenceRate];
    self.processStatus = [aDecoder decodeObjectForKey:kLJDataProcessStatus];
    self.special = [aDecoder decodeObjectForKey:kLJDataSpecial];
    self.evaluateStatus = [aDecoder decodeObjectForKey:kLJDataEvaluateStatus];
    self.averagePrice = [aDecoder decodeObjectForKey:kLJDataAveragePrice];
    self.buildingCount = [aDecoder decodeObjectForKey:kLJDataBuildingCount];
    self.lowestTotalPrice = [aDecoder decodeObjectForKey:kLJDataLowestTotalPrice];
    self.showPrice = [aDecoder decodeObjectForKey:kLJDataShowPrice];
    self.bizcircleId = [aDecoder decodeObjectForKey:kLJDataBizcircleId];
    self.minFrameInsideArea = [aDecoder decodeObjectForKey:kLJDataMinFrameInsideArea];
    self.resblockName = [aDecoder decodeObjectForKey:kLJDataResblockName];
    self.districtName = [aDecoder decodeObjectForKey:kLJDataDistrictName];
    self.cityId = [aDecoder decodeObjectForKey:kLJDataCityId];
    self.virescenceArea = [aDecoder decodeObjectForKey:kLJDataVirescenceArea];
    self.isExclusive = [aDecoder decodeObjectForKey:kLJDataIsExclusive];
    self.propertyAddress = [aDecoder decodeObjectForKey:kLJDataPropertyAddress];
    self.showPriceConfirmTime = [aDecoder decodeObjectForKey:kLJDataShowPriceConfirmTime];
    self.allowance = [aDecoder decodeObjectForKey:kLJDataAllowance];
    self.resblockFrameArea = [aDecoder decodeObjectForKey:kLJDataResblockFrameArea];
    self.resblockDesc = [aDecoder decodeObjectForKey:kLJDataResblockDesc];
    self.showPriceDesc = [aDecoder decodeObjectForKey:kLJDataShowPriceDesc];
    self.recommendLogInfoDto = [aDecoder decodeObjectForKey:kLJDataRecommendLogInfoDto];
    self.checkinStartDate = [aDecoder decodeObjectForKey:kLJDataCheckinStartDate];
    self.displayVideoIntro = [aDecoder decodeObjectForKey:kLJDataDisplayVideoIntro];
    self.pid = [aDecoder decodeObjectForKey:kLJDataPid];
    self.status = [aDecoder decodeObjectForKey:kLJDataStatus];
    self.maxFrameInsideArea = [aDecoder decodeObjectForKey:kLJDataMaxFrameInsideArea];
    self.viewUrl = [aDecoder decodeObjectForKey:kLJDataViewUrl];
    self.discountInfo = [aDecoder decodeObjectForKey:kLJDataDiscountInfo];
    self.addressDesc = [aDecoder decodeObjectForKey:kLJDataAddressDesc];
    self.storeTel = [aDecoder decodeObjectForKey:kLJDataStoreTel];
    self.allowanceComm = [aDecoder decodeObjectForKey:kLJDataAllowanceComm];
    self.siteArea = [aDecoder decodeObjectForKey:kLJDataSiteArea];
    self.priceShowConfig = [aDecoder decodeObjectForKey:kLJDataPriceShowConfig];
    self.specialTag = [aDecoder decodeObjectForKey:kLJDataSpecialTag];
    self.totalArea = [aDecoder decodeObjectForKey:kLJDataTotalArea];
    self.undergroundCarNum = [aDecoder decodeObjectForKey:kLJDataUndergroundCarNum];
    self.permitAllReady = [aDecoder decodeObjectForKey:kLJDataPermitAllReady];
    self.showPriceUnit = [aDecoder decodeObjectForKey:kLJDataShowPriceUnit];
    self.coverPic = [aDecoder decodeObjectForKey:kLJDataCoverPic];
    self.partNum = [aDecoder decodeObjectForKey:kLJDataPartNum];
    self.frameRooms = [aDecoder decodeObjectForKey:kLJDataFrameRooms];
    self.cubageRate = [aDecoder decodeObjectForKey:kLJDataCubageRate];
    return self;
}

- (void)encodeWithCoder:(NSCoder *)aCoder
{

    [aCoder encodeObject:_minFrameArea forKey:kLJDataMinFrameArea];
    [aCoder encodeObject:_buildName forKey:kLJDataBuildName];
    [aCoder encodeObject:_rooms forKey:kLJDataRooms];
    [aCoder encodeObject:_resblockAlias forKey:kLJDataResblockAlias];
    [aCoder encodeObject:_longitude forKey:kLJDataLongitude];
    [aCoder encodeObject:_totalPriceMin forKey:kLJDataTotalPriceMin];
    [aCoder encodeObject:_evaluate forKey:kLJDataEvaluate];
    [aCoder encodeObject:_bizcircleName forKey:kLJDataBizcircleName];
    [aCoder encodeObject:_specialTags forKey:kLJDataSpecialTags];
    [aCoder encodeObject:_decorateType forKey:kLJDataDecorateType];
    [aCoder encodeObject:_avgPriceMax forKey:kLJDataAvgPriceMax];
    [aCoder encodeObject:_dataIdentifier forKey:kLJDataId];
    [aCoder encodeObject:_address forKey:kLJDataAddress];
    [aCoder encodeObject:_price forKey:kLJDataPrice];
    [aCoder encodeObject:_totalPrice forKey:kLJDataTotalPrice];
    [aCoder encodeObject:_totalPriceMax forKey:kLJDataTotalPriceMax];
    [aCoder encodeObject:_cityName forKey:kLJDataCityName];
    [aCoder encodeObject:_houseAmount forKey:kLJDataHouseAmount];
    [aCoder encodeObject:_decoration forKey:kLJDataDecoration];
    [aCoder encodeObject:_hasVirtualView forKey:kLJDataHasVirtualView];
    [aCoder encodeObject:_discountType forKey:kLJDataDiscountType];
    [aCoder encodeObject:_projectTags forKey:kLJDataProjectTags];
    [aCoder encodeObject:_saleStatus forKey:kLJDataSaleStatus];
    [aCoder encodeObject:_addressRemark forKey:kLJDataAddressRemark];
    [aCoder encodeObject:_videoIntro forKey:kLJDataVideoIntro];
    [aCoder encodeObject:_discountValue forKey:kLJDataDiscountValue];
    [aCoder encodeObject:_carRatio forKey:kLJDataCarRatio];
    [aCoder encodeObject:_tags forKey:kLJDataTags];
    [aCoder encodeObject:_buildId forKey:kLJDataBuildId];
    [aCoder encodeObject:_houseType forKey:kLJDataHouseType];
    [aCoder encodeObject:_maxFrameArea forKey:kLJDataMaxFrameArea];
    [aCoder encodeObject:_latitude forKey:kLJDataLatitude];
    [aCoder encodeObject:_buildType forKey:kLJDataBuildType];
    [aCoder encodeObject:_openTime forKey:kLJDataOpenTime];
    [aCoder encodeObject:_priceConfirmTime forKey:kLJDataPriceConfirmTime];
    [aCoder encodeObject:_fullSpell forKey:kLJDataFullSpell];
    [aCoder encodeObject:_districtId forKey:kLJDataDistrictId];
    [aCoder encodeObject:_overgroundCarNum forKey:kLJDataOvergroundCarNum];
    [aCoder encodeObject:_isCooperation forKey:kLJDataIsCooperation];
    [aCoder encodeObject:_storeAddr forKey:kLJDataStoreAddr];
    [aCoder encodeObject:_discountRealpay forKey:kLJDataDiscountRealpay];
    [aCoder encodeObject:_projectName forKey:kLJDataProjectName];
    [aCoder encodeObject:_outletCenterTel forKey:kLJDataOutletCenterTel];
    [aCoder encodeObject:_administrativeAddress forKey:kLJDataAdministrativeAddress];
    [aCoder encodeObject:_houseTypeValue forKey:kLJDataHouseTypeValue];
    [aCoder encodeObject:_virescenceRate forKey:kLJDataVirescenceRate];
    [aCoder encodeObject:_processStatus forKey:kLJDataProcessStatus];
    [aCoder encodeObject:_special forKey:kLJDataSpecial];
    [aCoder encodeObject:_evaluateStatus forKey:kLJDataEvaluateStatus];
    [aCoder encodeObject:_averagePrice forKey:kLJDataAveragePrice];
    [aCoder encodeObject:_buildingCount forKey:kLJDataBuildingCount];
    [aCoder encodeObject:_lowestTotalPrice forKey:kLJDataLowestTotalPrice];
    [aCoder encodeObject:_showPrice forKey:kLJDataShowPrice];
    [aCoder encodeObject:_bizcircleId forKey:kLJDataBizcircleId];
    [aCoder encodeObject:_minFrameInsideArea forKey:kLJDataMinFrameInsideArea];
    [aCoder encodeObject:_resblockName forKey:kLJDataResblockName];
    [aCoder encodeObject:_districtName forKey:kLJDataDistrictName];
    [aCoder encodeObject:_cityId forKey:kLJDataCityId];
    [aCoder encodeObject:_virescenceArea forKey:kLJDataVirescenceArea];
    [aCoder encodeObject:_isExclusive forKey:kLJDataIsExclusive];
    [aCoder encodeObject:_propertyAddress forKey:kLJDataPropertyAddress];
    [aCoder encodeObject:_showPriceConfirmTime forKey:kLJDataShowPriceConfirmTime];
    [aCoder encodeObject:_allowance forKey:kLJDataAllowance];
    [aCoder encodeObject:_resblockFrameArea forKey:kLJDataResblockFrameArea];
    [aCoder encodeObject:_resblockDesc forKey:kLJDataResblockDesc];
    [aCoder encodeObject:_showPriceDesc forKey:kLJDataShowPriceDesc];
    [aCoder encodeObject:_recommendLogInfoDto forKey:kLJDataRecommendLogInfoDto];
    [aCoder encodeObject:_checkinStartDate forKey:kLJDataCheckinStartDate];
    [aCoder encodeObject:_displayVideoIntro forKey:kLJDataDisplayVideoIntro];
    [aCoder encodeObject:_pid forKey:kLJDataPid];
    [aCoder encodeObject:_status forKey:kLJDataStatus];
    [aCoder encodeObject:_maxFrameInsideArea forKey:kLJDataMaxFrameInsideArea];
    [aCoder encodeObject:_viewUrl forKey:kLJDataViewUrl];
    [aCoder encodeObject:_discountInfo forKey:kLJDataDiscountInfo];
    [aCoder encodeObject:_addressDesc forKey:kLJDataAddressDesc];
    [aCoder encodeObject:_storeTel forKey:kLJDataStoreTel];
    [aCoder encodeObject:_allowanceComm forKey:kLJDataAllowanceComm];
    [aCoder encodeObject:_siteArea forKey:kLJDataSiteArea];
    [aCoder encodeObject:_priceShowConfig forKey:kLJDataPriceShowConfig];
    [aCoder encodeObject:_specialTag forKey:kLJDataSpecialTag];
    [aCoder encodeObject:_totalArea forKey:kLJDataTotalArea];
    [aCoder encodeObject:_undergroundCarNum forKey:kLJDataUndergroundCarNum];
    [aCoder encodeObject:_permitAllReady forKey:kLJDataPermitAllReady];
    [aCoder encodeObject:_showPriceUnit forKey:kLJDataShowPriceUnit];
    [aCoder encodeObject:_coverPic forKey:kLJDataCoverPic];
    [aCoder encodeObject:_partNum forKey:kLJDataPartNum];
    [aCoder encodeObject:_frameRooms forKey:kLJDataFrameRooms];
    [aCoder encodeObject:_cubageRate forKey:kLJDataCubageRate];
}

- (id)copyWithZone:(NSZone *)zone {
    LJData *copy = [[LJData alloc] init];
    
    
    
    if (copy) {

        copy.minFrameArea = [self.minFrameArea copyWithZone:zone];
        copy.buildName = [self.buildName copyWithZone:zone];
        copy.rooms = [self.rooms copyWithZone:zone];
        copy.resblockAlias = [self.resblockAlias copyWithZone:zone];
        copy.longitude = [self.longitude copyWithZone:zone];
        copy.totalPriceMin = [self.totalPriceMin copyWithZone:zone];
        copy.evaluate = [self.evaluate copyWithZone:zone];
        copy.bizcircleName = [self.bizcircleName copyWithZone:zone];
        copy.specialTags = [self.specialTags copyWithZone:zone];
        copy.decorateType = [self.decorateType copyWithZone:zone];
        copy.avgPriceMax = [self.avgPriceMax copyWithZone:zone];
        copy.dataIdentifier = [self.dataIdentifier copyWithZone:zone];
        copy.address = [self.address copyWithZone:zone];
        copy.price = [self.price copyWithZone:zone];
        copy.totalPrice = [self.totalPrice copyWithZone:zone];
        copy.totalPriceMax = [self.totalPriceMax copyWithZone:zone];
        copy.cityName = [self.cityName copyWithZone:zone];
        copy.houseAmount = [self.houseAmount copyWithZone:zone];
        copy.decoration = [self.decoration copyWithZone:zone];
        copy.hasVirtualView = [self.hasVirtualView copyWithZone:zone];
        copy.discountType = [self.discountType copyWithZone:zone];
        copy.projectTags = [self.projectTags copyWithZone:zone];
        copy.saleStatus = [self.saleStatus copyWithZone:zone];
        copy.addressRemark = [self.addressRemark copyWithZone:zone];
        copy.videoIntro = [self.videoIntro copyWithZone:zone];
        copy.discountValue = [self.discountValue copyWithZone:zone];
        copy.carRatio = [self.carRatio copyWithZone:zone];
        copy.tags = [self.tags copyWithZone:zone];
        copy.buildId = [self.buildId copyWithZone:zone];
        copy.houseType = [self.houseType copyWithZone:zone];
        copy.maxFrameArea = [self.maxFrameArea copyWithZone:zone];
        copy.latitude = [self.latitude copyWithZone:zone];
        copy.buildType = [self.buildType copyWithZone:zone];
        copy.openTime = [self.openTime copyWithZone:zone];
        copy.priceConfirmTime = [self.priceConfirmTime copyWithZone:zone];
        copy.fullSpell = [self.fullSpell copyWithZone:zone];
        copy.districtId = [self.districtId copyWithZone:zone];
        copy.overgroundCarNum = [self.overgroundCarNum copyWithZone:zone];
        copy.isCooperation = [self.isCooperation copyWithZone:zone];
        copy.storeAddr = [self.storeAddr copyWithZone:zone];
        copy.discountRealpay = [self.discountRealpay copyWithZone:zone];
        copy.projectName = [self.projectName copyWithZone:zone];
        copy.outletCenterTel = [self.outletCenterTel copyWithZone:zone];
        copy.administrativeAddress = [self.administrativeAddress copyWithZone:zone];
        copy.houseTypeValue = [self.houseTypeValue copyWithZone:zone];
        copy.virescenceRate = [self.virescenceRate copyWithZone:zone];
        copy.processStatus = [self.processStatus copyWithZone:zone];
        copy.special = [self.special copyWithZone:zone];
        copy.evaluateStatus = [self.evaluateStatus copyWithZone:zone];
        copy.averagePrice = [self.averagePrice copyWithZone:zone];
        copy.buildingCount = [self.buildingCount copyWithZone:zone];
        copy.lowestTotalPrice = [self.lowestTotalPrice copyWithZone:zone];
        copy.showPrice = [self.showPrice copyWithZone:zone];
        copy.bizcircleId = [self.bizcircleId copyWithZone:zone];
        copy.minFrameInsideArea = [self.minFrameInsideArea copyWithZone:zone];
        copy.resblockName = [self.resblockName copyWithZone:zone];
        copy.districtName = [self.districtName copyWithZone:zone];
        copy.cityId = [self.cityId copyWithZone:zone];
        copy.virescenceArea = [self.virescenceArea copyWithZone:zone];
        copy.isExclusive = [self.isExclusive copyWithZone:zone];
        copy.propertyAddress = [self.propertyAddress copyWithZone:zone];
        copy.showPriceConfirmTime = [self.showPriceConfirmTime copyWithZone:zone];
        copy.allowance = [self.allowance copyWithZone:zone];
        copy.resblockFrameArea = [self.resblockFrameArea copyWithZone:zone];
        copy.resblockDesc = [self.resblockDesc copyWithZone:zone];
        copy.showPriceDesc = [self.showPriceDesc copyWithZone:zone];
        copy.recommendLogInfoDto = [self.recommendLogInfoDto copyWithZone:zone];
        copy.checkinStartDate = [self.checkinStartDate copyWithZone:zone];
        copy.displayVideoIntro = [self.displayVideoIntro copyWithZone:zone];
        copy.pid = [self.pid copyWithZone:zone];
        copy.status = [self.status copyWithZone:zone];
        copy.maxFrameInsideArea = [self.maxFrameInsideArea copyWithZone:zone];
        copy.viewUrl = [self.viewUrl copyWithZone:zone];
        copy.discountInfo = [self.discountInfo copyWithZone:zone];
        copy.addressDesc = [self.addressDesc copyWithZone:zone];
        copy.storeTel = [self.storeTel copyWithZone:zone];
        copy.allowanceComm = [self.allowanceComm copyWithZone:zone];
        copy.siteArea = [self.siteArea copyWithZone:zone];
        copy.priceShowConfig = [self.priceShowConfig copyWithZone:zone];
        copy.specialTag = [self.specialTag copyWithZone:zone];
        copy.totalArea = [self.totalArea copyWithZone:zone];
        copy.undergroundCarNum = [self.undergroundCarNum copyWithZone:zone];
        copy.permitAllReady = [self.permitAllReady copyWithZone:zone];
        copy.showPriceUnit = [self.showPriceUnit copyWithZone:zone];
        copy.coverPic = [self.coverPic copyWithZone:zone];
        copy.partNum = [self.partNum copyWithZone:zone];
        copy.frameRooms = [self.frameRooms copyWithZone:zone];
        copy.cubageRate = [self.cubageRate copyWithZone:zone];
    }
    
    return copy;
}


@end
